#include "Etu.h"
#include <iostream>
#include <vector>
using namespace std;

void * Etu::gereLecture(void * arg){
  Etu * param = (Etu *)arg;
  string buf;int tailleMSG;
  string msg ;

  int iter=0,tQ=0;string Q; int tLR;
  ofstream of("tempVOIP.wav",ios::out| ios::trunc);
  ofstream ofVOIP;
  while (1){
    ////////// section critique ////////////
    pthread_mutex_lock(&param->v);
    if(!repondu) pthread_cond_wait(&param->CL,&param->v);
    buf= param->getProto();
    
    param->etat=buf;
    //////////////////// debut des comparaisons /////////////////////
    if(buf == "AST/MSG"){
      // on lit un int 
      tailleMSG=param->getInt();
      msg = param->getString(tailleMSG);
      cout<<msg<<endl;
    }                  
    if(buf == "AST/VOIP"){
      /* _ _ _  */ tQ=param->getInt();
      Q=param->getString(tQ);
      ofVOIP.open("tempVOIP.wav",ios::out| ios::trunc);
      ofVOIP<<Q<<endl;
      ofVOIP.close();
      system("... tempVOIP.wav");//demander commande a MR MARTIN
    }                                    
    if(buf == "ETU/QCM"){
      /* 
       * on lit la taille de la question pis la question
       * puis la taille de la liste de reponse
       * puis on lit une a une les reponses
       * soit la taille de la réponse pusi la reponse 
       */
      tQ=param->getInt();
      Q=param->getString(tQ);
      cout<<Q<<endl;
      tLR=param->getInt();
      for (iter =0 ;iter<tLR;iter++){
	tQ=param->getInt();
	Q=param->getString(tQ);
	cout<<Q<<endl;
      }                 
    } 
    
    if(buf == "ETU/Q2"){
      tQ=param->getInt();
      Q=param->getString(tQ);
      cout<<Q<<endl;
    }
    
    if(buf == "ETU/Q3"){
      tQ=param->getInt();
      Q=param->getString(tQ);
      of.open("temp.wav",ios::out| ios::trunc);
      of<<Q<<endl;
      of.close();
      system("aplay temp.wav");//demander commande a MR MARTIN
    }                   
    if(buf == "ETU/Q4"){
      tQ=param->getInt();
      Q=param->getString(tQ);
      of.open("temp.wav",ios::out| ios::trunc);
      of<<Q<<endl;
      of.close();
      system("... temp.wav");//demander commande a MR MARTIN
    }                         
    ///if(buf == "ET U/OBS /Q4"){}                   
    if(buf == "ETU/FIN/ACTIVITE"){
      return NULL; //on kick l'etudiant
    }               
    
    pthread_cond_signal(&param->CE);
    param->repondu=false;
    pthread_mutex_unlock(&param->v); 
    ////////// fin section critique && fin boucle ////////
  }
  return NULL;

}

void * Etu::gereEcriture(void * arg){
 Etu * param = (Etu *)arg;
 string buf;
 bool continu=true;
 int repCount=0;
 vector<string> Vrep;
 vector<int> Vtrep;
 int iter=0;
  while (1){
    ////////// section critique ////////////
    pthread_mutex_lock(&param->v);
    if(repondu) pthread_cond_wait(&param->CE,&param->v);
    //////////////////// debut des comparaisons /////////////////////
    if(param->etat == "AST/MSG"){
      /* 
       * il a reçu un msg d'un ast 
       * il doit répondre
       */
      cout<<"Votre reponse à l'assistant";
      getline(cin,buf);
      param->sendProto("ETU/AST/MSG");
      param->sendInt(buf.size());
      param->sendString(buf.c_str(), buf.size());
    }                  
    if(param->etat == "AST/VOIP"){
      /*
       * ignoré pour le moment
       */
    }                                    
    if(param->etat == "ETU/QCM"){
      cout<<"Vos réponses : ";
      repCount=0;
      while(continu){
	getline(cin,buf);
	if(buf=="") {continu=false;break;}
	else{
	  Vrep.push_back(buf);
	  Vtrep.push_back(buf.size());
	  repCount++;
	}
      }
      /* on envoi la taille de Vrep */
      param->sendInt(repCount);
      /* on parcours le vector pour retourner les reponses */
      for(iter=0;iter<repCount;iter++){
	/* on envoie la taille de la rep, suivie de la rep */
	param->sendInt(Vtrep[iter]);
	param->sendString(Vrep[iter].c_str(),Vtrep[iter]);
      }
      // on nettoie 
      Vrep.clear();
      Vtrep.clear();
      repCount=0;
      iter=0;
      
    } 
    
    if(param->etat == "ETU/Q2"){
      cout<<"Votre réponse :";
      getline(cin,buf);
      param->sendInt(buf.size());
      param->sendString(buf.c_str(),buf.size());
    }
    
    if(param->etat == "ETU/Q3"){
      cout<<"Votre réponse :";
      getline(cin,buf);
      param->sendInt(buf.size());
      param->sendString(buf.c_str(),buf.size());
    }                   
    if(param->etat == "ETU/Q4"){
      /*
       * reponse VOIP ignorée pour le moment 
       */ 
    }                         
   
    pthread_cond_signal(&param->CL);
    param->repondu=true;
    pthread_mutex_unlock(&param->v); 
    ////////// fin section critique && fin boucle ////////
    
  }
  return NULL;
}
